<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>2022-7-29作业</title>
  </head>
  <body>
    <script>
      //1. 定义函数有几种方式，有什么区别？
    //   答:有两种方式
      //方式1:函数声明式
      function a() {}
      //方式2:函数表达式
      var b = function() {}
      //区别是:如果调用声明式函数 在函数定义前/后调用都是可以的
      //而表达式函数 在它定义前调用它就会报错

      //2.return 关键字有那两种作用
      // 答:返回结果 还可以起到中断方法执行的效果 返回你想返回的值到函数调用的地方

      //3.函数实参数和形参个数不等时会发生什么？举例说明
      function sum(a, b, c, d) {
        console.log(a + b + c + d);
      }
      sum(1, 1, 1); //这种实参和形参不等 会报一个NaN
      function Sum(a, b, c) {
        console.log(a);
        console.log(b);
        console.log(c);
      }
      Sum(1, 1); //这种情况 调用Sum方法 a=1 b=2 c没有实参传给他 它是一个未定义的undefined
      Sum(1, 2, 3, 4, 5); //这种情况 a=1 b=2 c=3  4和5没有形参去接 直接抛弃

      //4.请定义一个函数，该函数功能为，传入一个值，返回这个值的平方值
      function square(n) {
        return (n *= n);
      }
      var res = square(3);
      console.log(res);

      //5.请写出一个函数，功能为：传入 2 个值，则返回其中的最大值；请再写一个函数，传入 3 个值，返回其中的最大值
      var getMax = function (a, b) {
        if (a > b) {
          return a;
        } else {
          return b;
        }
      };
      console.log(getMax(10, 20));

      function GetMax(a, b, c) {
        if (a > b && a > c) {
          return a;
        } else if (b > a && b > c) {
          return b;
        } else {
          return c;
        }
      }
      console.log(GetMax(100, 200, 300));

      //6.请定义一个函数，输入一个 N 值，则计算出该值的阶乘，即：`n! = 1*2*3*4*5*6*...`
      function factorial(n) {
        if (n <= 0) {
          return 1;
        } else {
          return n * factorial(n - 1);
        }
      }
      console.log(factorial(6));
      // 或者
      function factorial1(n1) {
        var u = 1;
        for (var i = 1; i <= 6; i++) {
          u *= i;
        }
        return u;
      }
      console.log(factorial1(6));

    </script>
  </body>
</html>
